import tkinter
from tkinter import filedialog  # 显式导入 filedialog


class Query:  # 类是整个页面

    def __init__(self, master):
        self.root = master
        # 设置窗口对象大小，起始位置,固定窗口大小
        self.root.maxsize(600, 500)
        self.root.minsize(600, 500)
        self.root.geometry('600x500+100+100')
        # 设置窗口标题
        self.root.title('小说下载器')
        # 设置图标
        # self.root.iconbitmap('')
        # 设置背景颜色
        # self.root.config(bg='#f1f0f1')

        # tkinter.StringVar() 可以与组件的文字进行绑定
        self.index_url = tkinter.StringVar()
        # 保存路径
        self.save_path = tkinter.StringVar()

        self.create_page()
        self.handle_event()

    def create_page(self):  # 创建页面

        # label 文本框
        tkinter.Label(self.root, text='请输入你要下载的小说链接地址').place(x=30, y=30)
        # 输入框
        tkinter.Entry(self.root, width=60, textvariable=self.index_url).place(x=30, y=60)
        # 保存路径
        tkinter.Label(self.root, text='保存路径').place(x=30, y=90)
        # 路径输入框
        tkinter.Entry(self.root, width=25, textvariable=self.save_path).place(x=30, y=120)
        # 浏览按钮
        self.button1 = tkinter.Button(self.root, text='浏览', width=6, height=2)
        self.button1.place(x=250, y=110)
        # 下载按钮
        self.button2 = tkinter.Button(self.root, text='下载', width=6, height=2)
        self.button2.place(x=390, y=110)
        # 清空按钮
        self.button3 = tkinter.Button(self.root, text='清空', width=6, height=2)
        self.button3.place(x=490, y=110)

        # 文本框
        self.text = tkinter.Text(self.root, width=82, height=23)
        self.text.place(x=10, y=180)

    def handle_event(self):  # 处理点击事件
        # 点击下载,赋值对面
        self.button2['command'] = self.download_book
        # 点击清空
        self.button3['command'] = self.clear_text
        # 点击选择路径
        self.button1['command'] = self.select_path

    def download_book(self):
        book_url = self.index_url.get()
        print(book_url)
        # 判断url不为空
        if not book_url:
            self.text.insert('insert', '小说链接地址不可以为空\n')
            self.text.update()
            return
        # 判断保存路径是否为空
        if not self.save_path.get():
            self.text.insert('insert', '请选择保存路径\n')
            self.text.update()
            return
        # 调用方法获取地址
        """
        此处省略了爬取小说代码
        此处是假数据
        """
        book_name = '斗罗大陆'
        book_content = '斗罗大陆'

        # 下载完成后,把下载信息插入到文本中
        self.text.insert('insert', '下载成功\n')
        self.text.update()

        # 保存到选择的路径中
        with open(f'{self.save_path.get()}/{book_name}.txt', 'w', encoding='utf-8') as f:
            f.write(book_content)

    def select_path(self):
        # 选择保存路径
        path = tkinter.filedialog.askdirectory()
        # path显示在保存路径输入框中
        self.save_path.set(path)

    def clear_text(self):
        self.text.delete(1.0, tkinter.END)
        self.index_url.set('')


if __name__ == '__main__':
    # 窗口对象
    root = tkinter.Tk()
    # 调用页面类，传入窗口对象
    Query(root)
    # 事件循环
    root.mainloop()
